home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / prodpack.zip / DB4PPSAM.EXE / TVDIAL.PRG < prev    next >
Text File  |  1993-05-25  |  63KB  |  2,089 lines

  1. *-- DBW - Dialog Box Workshop - TVDIAL.PRG
  2. PROCEDURE TVDIAL
  3. *----------------------------------------------------------------------------
  4. * NAME
  5. * DESCRIPTION
  6. *----------------------------------------------------------------------------
  7.   PRIVATE  cAlias, cWindow, lTalk, lSafety, cDialog, cHelpFile, cStartLib
  8.  
  9.   IF SET( "TALK" ) = "ON"
  10.     SET TALK OFF
  11.     lTalk = .T.
  12.   ELSE
  13.     lTalk = .F.
  14.   ENDIF
  15.  
  16.   lSafety = SET( "SAFETY" ) = "ON"
  17.   SET SAFETY OFF
  18.  
  19.   cWindow = WINDOW()
  20.   cAlias = ALIAS()
  21.  
  22.   *----------------------------------
  23.   *-- Setup the help system variables
  24.   *----------------------------------
  25.   lError = .F.
  26.   cHelpFile = "DBBHELP"
  27.   cDialog = "TVDIAL"
  28.   cDBBLib = "DBBLIB"
  29.  
  30.   *----------------------------------------------
  31.   *-- Setup the link to the DBB Procedure Library
  32.   *----------------------------------------------
  33.   ON ERROR lError = .T.
  34.   cStartLib = SET( "PROCEDURE" )
  35.   SET PROCEDURE TO ( cDBBLib )
  36.   IF lError
  37.     lError = .F.
  38.     SET PROCEDURE TO HOME() + cDBBLib
  39.     IF lError
  40.       *-- Display the error message in a windowed box
  41.       PRIVATE lc_anykey, lc_msg, lc_msglen, lc_win, ln_press, ln_width, ll_trap,;
  42.               ll_escape
  43.  
  44.       lc_anykey = [Press any key to continue...]
  45.       ln_press  = LEN( lc_anykey )
  46.       lc_msg    = [Could not locate procedure file: ] + cDBBLib
  47.       ln_msglen = LEN( lc_msg )
  48.       ln_width = 0
  49.       ll_escape = SET("ESCAPE") = "ON"
  50.       SET ESCAPE OFF
  51.  
  52.       *-- Determine the width needed for the window:
  53.       IF ln_msglen <= ln_press
  54.         ln_width = ln_press
  55.       ELSE
  56.         *-- Make sure the message fits in the window:
  57.         IF ln_msglen > 76
  58.           lc_msg = LEFT( lc_msg, 76 )
  59.           ln_msglen = 76
  60.         ENDIF
  61.         ln_width = ln_msglen
  62.       ENDIF
  63.       DEFINE WINDOW _err_box FROM 9, ((76 - ln_width) + .5) / 2 ;
  64.                     TO 15, (ln_width + 83) / 2 DOUBLE
  65.       ln_width = ( ln_width + 2 )
  66.  
  67.       *-- Display the message and prompt to the window and wait for a key press
  68.       ACTIVATE WINDOW _err_box
  69.       ? lc_msg AT ( ln_width - ln_msglen ) / 2
  70.       ?
  71.       ? lc_anykey AT ( ln_width - ln_press ) / 2
  72.       SET CONSOLE OFF
  73.       WAIT
  74.       SET CONSOLE ON
  75.  
  76.       *-- Clean up the window display and reactivate the previous window
  77.       RELEASE WINDOW _err_box
  78.  
  79.       IF ll_escape
  80.         SET ESCAPE ON
  81.       ELSE
  82.         SET ESCAPE OFF
  83.       ENDIF
  84.  
  85.     ENDIF
  86.   ENDIF
  87.   ON ERROR
  88.  
  89.   *---------------------------------
  90.   *-- Run the actual dialog box code
  91.   *---------------------------------
  92.   IF .NOT. lError
  93.     DO Dialog
  94.   ENDIF
  95.  
  96.   *----------------------------------
  97.   *-- Restore the startup environment
  98.   *----------------------------------
  99.   IF .NOT. ISBLANK( cStartLib )
  100.     SET PROCEDURE TO ( cStartLib )
  101.   ENDIF
  102.  
  103.   IF .NOT. ISBLANK( cAlias ) .AND. SELECT( cAlias ) > 0
  104.     SELECT ( cAlias )
  105.   ENDIF
  106.  
  107.   IF lSafety
  108.     SET SAFETY ON
  109.   ENDIF
  110.   IF lTalk
  111.     SET TALK ON
  112.   ENDIF
  113.   IF .NOT. ISBLANK( cWindow )
  114.     ACTIVATE WINDOW &cWindow
  115.   ENDIF
  116. RETURN
  117. *-- EOP: TVDIAL
  118.  
  119.  
  120. PROCEDURE Dialog
  121. *----------------------------------------------------------------------------
  122. * NAME
  123. *   Dialog -
  124. *
  125. * DESCRIPTION
  126. *
  127. *----------------------------------------------------------------------------
  128.  
  129.   *---------------------------------------
  130.   *-- Temporary for now, message varaibles
  131.   *---------------------------------------
  132.   DLN_OK       = -500
  133.   DLN_CANCEL   = -501
  134.   DLN_HELP     = -502
  135.  
  136.   WM_PAINT    = 15                      && Notification to repaint client area
  137.   WM_CLOSE    = 16                      && Note that user selected close button
  138.   WM_DRAWITEM = 43                      && Notification to the owner of an
  139.  
  140.   BN_CLICKED  = 0
  141.   BN_PAINT    = 1
  142.   BN_HILITE   = 2
  143.   BN_UNHILITE = 3
  144.   BN_DISABLE  = 4
  145.   BN_DEFAULT  = 6
  146.   BN_PRESSED  = 7
  147.   BN_COLOR    = 8
  148.   SE_SHADOW   = -100
  149.  
  150.   EN_SETFOCU  = 1
  151.   EN_KILLFOC  = 2
  152.  
  153.   CB_SELECTS  = 13
  154.   CB_SHOWDRO  = 15
  155.   CB_HIDELST  = 25
  156.  
  157.   CBN_SELCHAN = 1
  158.   CBN_DBLCLK  = 2
  159.   CBN_SETFOCU = 3
  160.   CBN_KILLFOC = 4
  161.   CBN_EDITCHA = 5
  162.   CBN_EDITUPD = 6
  163.   CBN_DROPDOW = 7
  164.   CBN_INLIST  = 8
  165.  
  166.   LBN_SELCHA  =  1
  167.   LBN_DBLCLK  =  2
  168.   LBN_SELCAN  =  3
  169.   LBN_SETFOC  =  4
  170.   LBN_KILLFO  =  5
  171.  
  172.   KB_TAB = 9
  173.   KB_ENTER = 13
  174.   KB_SPACE = 32
  175.   KB_SHIFTTAB = -400
  176.   KB_UPARROW = 5
  177.   KB_DOWNARROW = 24
  178.   KB_LEFTARROW = 19
  179.   KB_RTARROW = 4
  180.   KB_F1 = 28
  181.   KB_ESC = 27
  182.   KB_MOUSE = -100
  183.   KB_CTRLW = 23
  184.  
  185.   *--------------------
  186.   *-- Working variables
  187.   *--------------------
  188.   PRIVATE nCurrent, nCurrGrp, lButtAct, nMRow, nMCol, nMsEvent, nDlgDef, nAccel
  189.   PRIVATE n1stGrp, nCancelBt
  190.   nCurrent  = 0                         && Current dialog object id
  191.   nCurrGrp  = 0                         && Current group id for object id
  192.   lButtAct  = .F.                       && Dialog has a button active
  193.   nMRow     = -1
  194.   nMCol     = -1
  195.   nMsEvent  = 0
  196.   nDlgDef   = 0
  197.   nAccel    = 0
  198.   n1stGrp   = 0
  199.   nCancelBt = 0                         && Id for cancel button
  200.  
  201.   PRIVATE nDefButt, nMess
  202.   nDefButt  = 0                         && Number of object with default button
  203.   nMess     = 0
  204.  
  205.   PRIVATE cOldFClr, cOldBClr, cOldHClr, cOldMClr, cOldNClr, cOldTClr
  206.   cOldFClr = _ColorChk( "F" )
  207.   cOldBClr = _ColorChk( "B" )
  208.   cOldHClr = _ColorChk( "H" )
  209.   cOldMClr = _ColorChk( "M" )
  210.   cOldNClr = _ColorChk( "N" )
  211.   cOldTClr = _ColorChk( "T" )
  212.  
  213.   SET COLOR OF FIELDS TO w+/b
  214.   SET COLOR OF BOX TO n/gb
  215.   SET COLOR OF HIGH TO w+/g
  216.   SET COLOR OF MESS TO n/gb
  217.   SET COLOR OF TITLE TO n/gb
  218.  
  219.   *------------------------
  220.   *-- Close Icon for window
  221.   *------------------------
  222.   PRIVATE nRowCls, nOrigRow, nOrigCol, nXoffset, nYOffset, nCol, ;
  223.           nHigh, nWidth, nLColCls, nRColCls, nRWinCol, cField, cClass, nScreen
  224.   cField = ""
  225.   cClass = ""
  226.  
  227.   nRowCls   = 3
  228.   nOrigRow  = 3
  229.   nOrigCol  = 19
  230.   nXOffset  = 0
  231.   nYOffset  = 0
  232.   nCol      = 19
  233.   nHigh     = 14
  234.   nWidth    = 42
  235.   nLColCls  = 21
  236.   nRColCls  = 23
  237.   nRWinCol  = 60
  238.   nScreen = IIF( "50" $ SET("DISPLAY"), 49, ;
  239.                 IIF( "43" $ SET("DISPLAY"), 42, 24 ) )
  240.   IF SET( "STATUS" ) = "ON"
  241.     nScreen = nScreen - 3
  242.   ENDIF
  243.  
  244.   PRIVATE nClkBox, nClkObj, aClkBox, aClkObj, aObjPoint
  245.   *--------------------------------------------------
  246.   *-- Get the number of clickable boxes in the dialog
  247.   *--------------------------------------------------
  248.   nClkBox = 0
  249.  
  250.   *--------------------------------------------------
  251.   *-- Get the number of clickable items in the dialog
  252.   *--------------------------------------------------
  253.   nClkObj = 9
  254.   DECLARE aClkObj[ 9 , 13 ]
  255.   aClkObj[ 1 , 1 ] = 6                  && Row
  256.   aClkObj[ 1 , 2 ] = 23                 && Col
  257.   aClkObj[ 1 , 3 ] = 35                 && Decimals
  258.   aClkObj[ 1 , 4 ] = 5                  && CurrentId
  259.   aClkObj[ 1 , 5 ] = 3                  && GroupId
  260.   aClkObj[ 1 , 6 ] = 7                  && NextId
  261.   aClkObj[ 1 , 7 ] = 14                 && PrevId
  262.   aClkObj[ 1 , 8 ] = "H"                && PickKey
  263.   aClkObj[ 1 , 9 ] = 9                  && Previous item in group
  264.   aClkObj[ 1 ,10 ] = 7                  && Next item in group
  265.   aClkObj[ 1 ,11 ] = "CK_CHEZ_1"         && [ ] ~Hvarti
  266.   aClkObj[ 1 ,12 ] = []
  267.   aClkObj[ 1 ,13 ] = []
  268.  
  269.   aClkObj[ 2 , 1 ] = 7                  && Row
  270.   aClkObj[ 2 , 2 ] = 23                 && Col
  271.   aClkObj[ 2 , 3 ] = 35                 && Decimals
  272.   aClkObj[ 2 , 4 ] = 7                  && CurrentId
  273.   aClkObj[ 2 , 5 ] = 3                  && GroupId
  274.   aClkObj[ 2 , 6 ] = 9                  && NextId
  275.   aClkObj[ 2 , 7 ] = 5                  && PrevId
  276.   aClkObj[ 2 , 8 ] = "T"                && PickKey
  277.   aClkObj[ 2 , 9 ] = 5                  && Previous item in group
  278.   aClkObj[ 2 ,10 ] = 9                  && Next item in group
  279.   aClkObj[ 2 ,11 ] = "CK_CHEZ_2"         && [ ] ~Tilset
  280.   aClkObj[ 2 ,12 ] = []
  281.   aClkObj[ 2 ,13 ] = []
  282.  
  283.   aClkObj[ 3 , 1 ] = 8                  && Row
  284.   aClkObj[ 3 , 2 ] = 23                 && Col
  285.   aClkObj[ 3 , 3 ] = 35                 && Decimals
  286.   aClkObj[ 3 , 4 ] = 9                  && CurrentId
  287.   aClkObj[ 3 , 5 ] = 3                  && GroupId
  288.   aClkObj[ 3 , 6 ] = 6                  && NextId
  289.   aClkObj[ 3 , 7 ] = 7                  && PrevId
  290.   aClkObj[ 3 , 8 ] = "J"                && PickKey
  291.   aClkObj[ 3 , 9 ] = 7                  && Previous item in group
  292.   aClkObj[ 3 ,10 ] = 5                  && Next item in group
  293.   aClkObj[ 3 ,11 ] = "CK_CHEZ_3"         && [ ] ~Jarlsberg
  294.   aClkObj[ 3 ,12 ] = []
  295.   aClkObj[ 3 ,13 ] = []
  296.  
  297.   aClkObj[ 4 , 1 ] = 6                  && Row
  298.   aClkObj[ 4 , 2 ] = 46                 && Col
  299.   aClkObj[ 4 , 3 ] = 55                 && Decimals
  300.   aClkObj[ 4 , 4 ] = 6                  && CurrentId
  301.   aClkObj[ 4 , 5 ] = 4                  && GroupId
  302.   aClkObj[ 4 , 6 ] = 8                  && NextId
  303.   aClkObj[ 4 , 7 ] = 9                  && PrevId
  304.   aClkObj[ 4 , 8 ] = "S"                && PickKey
  305.   aClkObj[ 4 , 9 ] = 10                 && Previous item in group
  306.   aClkObj[ 4 ,10 ] = 8                  && Next item in group
  307.   aClkObj[ 4 ,11 ] = "RB_CONS_1"         && ( ) ~Solid
  308.   aClkObj[ 4 ,12 ] = []
  309.   aClkObj[ 4 ,13 ] = []
  310.  
  311.   aClkObj[ 5 , 1 ] = 7                  && Row
  312.   aClkObj[ 5 , 2 ] = 46                 && Col
  313.   aClkObj[ 5 , 3 ] = 55                 && Decimals
  314.   aClkObj[ 5 , 4 ] = 8                  && CurrentId
  315.   aClkObj[ 5 , 5 ] = 4                  && GroupId
  316.   aClkObj[ 5 , 6 ] = 10                 && NextId
  317.   aClkObj[ 5 , 7 ] = 6                  && PrevId
  318.   aClkObj[ 5 , 8 ] = "R"                && PickKey
  319.   aClkObj[ 5 , 9 ] = 6                  && Previous item in group
  320.   aClkObj[ 5 ,10 ] = 10                 && Next item in group
  321.   aClkObj[ 5 ,11 ] = "RB_CONS_2"         && ( ) ~Runny
  322.   aClkObj[ 5 ,12 ] = []
  323.   aClkObj[ 5 ,13 ] = []
  324.  
  325.   aClkObj[ 6 , 1 ] = 8                  && Row
  326.   aClkObj[ 6 , 2 ] = 46                 && Col
  327.   aClkObj[ 6 , 3 ] = 55                 && Decimals
  328.   aClkObj[ 6 , 4 ] = 10                 && CurrentId
  329.   aClkObj[ 6 , 5 ] = 4                  && GroupId
  330.   aClkObj[ 6 , 6 ] = 12                 && NextId
  331.   aClkObj[ 6 , 7 ] = 8                  && PrevId
  332.   aClkObj[ 6 , 8 ] = "M"                && PickKey
  333.   aClkObj[ 6 , 9 ] = 8                  && Previous item in group
  334.   aClkObj[ 6 ,10 ] = 6                  && Next item in group
  335.   aClkObj[ 6 ,11 ] = "RB_CONS_3"         && ( ) ~Melted
  336.   aClkObj[ 6 ,12 ] = []
  337.   aClkObj[ 6 ,13 ] = []
  338.  
  339.   aClkObj[ 7 , 1 ] = 12                 && Row
  340.   aClkObj[ 7 , 2 ] = 22                 && Col
  341.   aClkObj[ 7 , 3 ] = 56                 && Decimals
  342.   aClkObj[ 7 , 4 ] = 12                 && CurrentId
  343.   aClkObj[ 7 , 5 ] = 11                 && GroupId
  344.   aClkObj[ 7 , 6 ] = 13                 && NextId
  345.   aClkObj[ 7 , 7 ] = 10                 && PrevId
  346.   aClkObj[ 7 , 8 ] = " "                && PickKey
  347.   aClkObj[ 7 , 9 ] = 12                 && Previous item in group
  348.   aClkObj[ 7 ,10 ] = 12                 && Next item in group
  349.   aClkObj[ 7 ,11 ] = "EF_DELV_1"         && XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  350.   aClkObj[ 7 ,12 ] = []
  351.   aClkObj[ 7 ,13 ] = []
  352.  
  353.   aClkObj[ 8 , 1 ] = 14                 && Row
  354.   aClkObj[ 8 , 2 ] = 28                 && Col
  355.   aClkObj[ 8 , 3 ] = 35                 && Decimals
  356.   aClkObj[ 8 , 4 ] = 13                 && CurrentId
  357.   aClkObj[ 8 , 5 ] = 13                 && GroupId
  358.   aClkObj[ 8 , 6 ] = 14                 && NextId
  359.   aClkObj[ 8 , 7 ] = 12                 && PrevId
  360.   aClkObj[ 8 , 8 ] = "O"                && PickKey
  361.   aClkObj[ 8 , 9 ] = 13                 && Previous item in group
  362.   aClkObj[ 8 ,10 ] = 13                 && Next item in group
  363.   aClkObj[ 8 ,11 ] = "BT_OK"             &&    ~Ok
  364.   aClkObj[ 8 ,12 ] = []
  365.   aClkObj[ 8 ,13 ] = []
  366.  
  367.   aClkObj[ 9 , 1 ] = 14                 && Row
  368.   aClkObj[ 9 , 2 ] = 42                 && Col
  369.   aClkObj[ 9 , 3 ] = 49                 && Decimals
  370.   aClkObj[ 9 , 4 ] = 14                 && CurrentId
  371.   aClkObj[ 9 , 5 ] = 14                 && GroupId
  372.   aClkObj[ 9 , 6 ] = 5                  && NextId
  373.   aClkObj[ 9 , 7 ] = 13                 && PrevId
  374.   aClkObj[ 9 , 8 ] = "C"                && PickKey
  375.   aClkObj[ 9 , 9 ] = 14                 && Previous item in group
  376.   aClkObj[ 9 ,10 ] = 14                 && Next item in group
  377.   aClkObj[ 9 ,11 ] = "BT_CANCEL"         &&  ~Cancel
  378.   aClkObj[ 9 ,12 ] = []
  379.   aClkObj[ 9 ,13 ] = []
  380.  
  381.   nCancelBt = 14
  382.  
  383.  
  384.   *-------------------------------------------------------------
  385.   *-- Setup object pointers in to the current object array above
  386.   *-------------------------------------------------------------
  387.   DECLARE aObjPoint[ 14 ]
  388.   aObjPoint[ 5 ] = 1
  389.   aObjPoint[ 7 ] = 2
  390.   aObjPoint[ 9 ] = 3
  391.   aObjPoint[ 6 ] = 4
  392.   aObjPoint[ 8 ] = 5
  393.   aObjPoint[ 10 ] = 6
  394.   aObjPoint[ 12 ] = 7
  395.   aObjPoint[ 13 ] = 8
  396.   aObjPoint[ 14 ] = 9
  397.  
  398.   *-------------------------------------------------------------------
  399.   *-- Setup private memory variables for object states (from InitObjs)
  400.   *-- First variable with the object memvar name contains the value
  401.   *-- for the object.  The second varaible, if present, indicates
  402.   *-- the id of the object previously active in the group.
  403.   *-------------------------------------------------------------------
  404.   PRIVATE ck_chez_1
  405.   ck_chez_1   = ""
  406.   PRIVATE nCk_chez
  407.   nCk_chez = 5
  408.   PRIVATE ck_chez_2
  409.   ck_chez_2   = ""
  410.   PRIVATE ck_chez_3
  411.   ck_chez_3   = ""
  412.   PRIVATE rb_cons_1
  413.   rb_cons_1   = ""
  414.   PRIVATE nRb_cons
  415.   nRb_cons = 6
  416.   PRIVATE rb_cons_2
  417.   rb_cons_2   = ""
  418.   PRIVATE rb_cons_3
  419.   rb_cons_3   = ""
  420.   PRIVATE ef_delv_1
  421.   ef_delv_1   = ""
  422.   PRIVATE bt_ok
  423.   bt_ok       = ""
  424.   PRIVATE bt_cancel
  425.   bt_cancel   = ""
  426.  
  427.   DO InitObjs
  428.  
  429.   DO DrawDial                           && Draw all the dialog objects
  430.  
  431.   *--------------------------------
  432.   *-- Set focus to the first object
  433.   *--------------------------------
  434.   DO GetNext WITH nCurrent, .T.
  435.  
  436.   *-- The message loop
  437.   nMess = 0
  438.   DO WHILE .NOT. GetMess()
  439.     DO Dispatch
  440.     IF nMess = DLN_OK .OR. nMess = DLN_CANCEL
  441.       EXIT
  442.     ENDIF
  443.  
  444.   ENDDO
  445.  
  446.   IF nMess = DLN_OK
  447.     DO PostVals
  448.     FXL_Cancel = .F.
  449.   ELSE
  450.     FXL_Cancel = .T.
  451.   ENDIF
  452.  
  453.   RELEASE WINDOW TVDIAL
  454.   RESTORE SCREEN FROM TVDIAL
  455.   RELEASE SCREEN TVDIAL
  456.  
  457.   DO ReleObjs
  458.  
  459.   SET COLOR OF FIELDS TO &cOldFClr
  460.   SET COLOR OF BOX TO &cOldBClr
  461.   SET COLOR OF HIGH TO &cOldHClr
  462.   SET COLOR OF MESS TO &cOldMClr
  463.   SET COLOR OF TITLE TO &cOldTClr
  464.   SET CURSOR ON
  465.  
  466. RETURN
  467. *-- EOP: Dialog
  468.  
  469. PROCEDURE InitObjs
  470. *----------------------------------------------------------------------------
  471. * NAME
  472. *   InitObjs - Scan the design DBF file and initialize the object variables
  473. *
  474. * DESCRIPTION
  475. *
  476. *----------------------------------------------------------------------------
  477.   PRIVATE cField, cClass, cDefault, Value, lInitDef
  478.  
  479.   *--------------------------------------------------
  480.   *-- Determine if an initialization array is present
  481.   *--------------------------------------------------
  482.   lInitDef = TYPE( "TVDIAL[1]" ) <> "U"
  483.  
  484.   *-------------------------------
  485.   *-- Set the default button value
  486.   *-------------------------------
  487.   nDlgDef =  13
  488.  
  489.   *-----------------------------------------------------------------
  490.   *-- If the Initialize array is present, then set the object values
  491.   *-- based on the array.
  492.   *-----------------------------------------------------------------
  493.   IF lInitDef
  494.     CK_CHEZ_1 = TVDIAL[ 1 ]
  495.     CK_CHEZ_2 = TVDIAL[ 2 ]
  496.     CK_CHEZ_3 = TVDIAL[ 3 ]
  497.     IF TVDIAL[ 4 ]                      && If this button is active
  498.       nRB_CONS = 6                      && Set the tab into value to this button
  499.     ENDIF
  500.     RB_CONS_1 = TVDIAL[ 4 ]
  501.     IF TVDIAL[ 5 ]                      && If this button is active
  502.       nRB_CONS = 8                      && Set the tab into value to this button
  503.     ENDIF
  504.     RB_CONS_2 = TVDIAL[ 5 ]
  505.     IF TVDIAL[ 6 ]                      && If this button is active
  506.       nRB_CONS = 10                     && Set the tab into value to this button
  507.     ENDIF
  508.     RB_CONS_3 = TVDIAL[ 6 ]
  509.     EF_DELV_1 = TVDIAL[ 7 ]
  510.     BT_OK = TVDIAL[ 8 ]
  511.     BT_CANCEL = TVDIAL[ 9 ]
  512.   ELSE
  513.     *--------------------------------------------------------
  514.     *-- Otherwise, use the values stored in the resource file
  515.     *--------------------------------------------------------
  516.     CK_CHEZ_1 = .F.
  517.     CK_CHEZ_2 = .F.
  518.     CK_CHEZ_3 = .F.
  519.     RB_CONS_1 = .F.
  520.     RB_CONS_2 = .F.
  521.     RB_CONS_3 = .T.
  522.     nRB_CONS = 10                       && Store the group default value
  523.     EF_DELV_1 = "PHONE HOME                         "
  524.     BT_OK = .T.
  525.     BT_CANCEL = .F.
  526.   ENDIF
  527.   nCurrent  = 5                         && Current dialog object id
  528.   nCurrGrp  = 3                         && Current group id for object id
  529.   n1stGrp   = 3
  530.  
  531. RETURN
  532. *-- EOP: InitObjs
  533.  
  534. PROCEDURE DrawDial
  535. *----------------------------------------------------------------------------
  536. * NAME
  537. *   DrawDial -
  538. *
  539. * DESCRIPTION
  540. *
  541. *----------------------------------------------------------------------------
  542.   PRIVATE lInitDef
  543.   lInitDef = TYPE( "TVDIAL[1]" ) <> "U"
  544.   IF FILE( "TVDIAL.WIN" ) .AND. ( .NOT. lInitDef .OR. ;
  545.      ( TYPE( "FXL_NoChng" ) = "L" .AND. FXL_NoChng ) )
  546.     *--------------------
  547.     *-- Dialog box shadow
  548.     *--------------------
  549.     SAVE SCREEN TO TVDIAL
  550.     ACTIVATE SCREEN
  551.     @ 4, 20 FILL TO 17, 61
  552.  
  553.     RESTORE WINDOW TVDIAL FROM TVDIAL
  554.     ACTIVATE WINDOW TVDIAL
  555.   ELSE
  556.     *-------------------------
  557.     *-- Draw the dialog window
  558.     *-------------------------
  559.     *--------------------
  560.     *-- Dialog box shadow
  561.     *--------------------
  562.     SAVE SCREEN TO TVDIAL
  563.     ACTIVATE SCREEN
  564.     @ 4, 20 FILL TO 17, 61
  565.  
  566.     DEFINE WINDOW TVDIAL FROM  3,19 TO 16,60 NONE COLOR n/w
  567.     ACTIVATE WINDOW TVDIAL
  568.     @ 0, 0 TO 13 , 41 DOUBLE COLOR w+/w
  569.     *------------------------
  570.     *-- Close Icon for window
  571.     *------------------------
  572.     @ 0, 2 SAY "[ ]" COLOR w+/w
  573.     @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  574.  
  575.     *---------------------------------
  576.     *-- Draw the other control objects
  577.     *---------------------------------
  578.     @ 0,13 SAY "Demo Dialog Box" COLOR w+/w
  579.     DO TStatic WITH WM_PAINT, BN_PAINT, 3
  580.     DO TButton WITH WM_PAINT, BN_PAINT, 5
  581.     DO TButton WITH WM_PAINT, BN_PAINT, 7
  582.     DO TButton WITH WM_PAINT, BN_PAINT, 9
  583.     DO TStatic WITH WM_PAINT, BN_PAINT, 4
  584.     DO TButton WITH WM_PAINT, BN_PAINT, 6
  585.     DO TButton WITH WM_PAINT, BN_PAINT, 8
  586.     DO TButton WITH WM_PAINT, BN_PAINT, 10
  587.     DO TStatic WITH WM_PAINT, BN_PAINT, 11
  588.     DO TEdit WITH WM_PAINT, EN_KILLFOC, 12
  589.     DO TButton WITH WM_PAINT, BN_PAINT, 13
  590.     DO TButton WITH WM_PAINT, SE_SHADOW, 13
  591.     DO TButton WITH WM_PAINT, BN_PAINT, 14
  592.     DO TButton WITH WM_PAINT, SE_SHADOW, 14
  593.     IF .NOT. lInitDef
  594.       SAVE WINDOW TVDIAL TO TVDIAL
  595.     ENDIF
  596.   ENDIF
  597. RETURN
  598. *-- EOP: DrawDial
  599.  
  600.  
  601.  
  602. PROCEDURE TStatic
  603. PARAMETERS pn_msg, pc_data, pnObject
  604. *----------------------------------------------------------------------------
  605. * NAME
  606. *   TStatic -
  607. *
  608. * DESCRIPTION
  609. *
  610. * PARAMETERS
  611. *   pn_msg     =
  612. *   pc_data    =
  613. *   pnObject   =
  614. *
  615. *----------------------------------------------------------------------------
  616.   DO CASE
  617.     CASE pnObject = 3
  618.       DO CASE
  619.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  620.           @ 2, 3 SAY "Cheeses" COLOR n/w
  621.         CASE pc_data = BN_HILITE
  622.           @ 2, 3 SAY "Cheeses" COLOR w+/w
  623.         CASE pc_data = BN_DISABLE
  624.           @ 2, 3 SAY "Cheeses" COLOR n+/w
  625.         CASE pc_data = BN_COLOR
  626.           @ 2, 3 SAY "Cheeses" COLOR n/w
  627.       ENDCASE
  628.     CASE pnObject = 4
  629.       DO CASE
  630.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  631.           @ 2, 26 SAY "Consistency" COLOR n/w
  632.         CASE pc_data = BN_HILITE
  633.           @ 2, 26 SAY "Consistency" COLOR w+/w
  634.         CASE pc_data = BN_DISABLE
  635.           @ 2, 26 SAY "Consistency" COLOR n+/w
  636.         CASE pc_data = BN_COLOR
  637.           @ 2, 26 SAY "Consistency" COLOR n/w
  638.       ENDCASE
  639.     CASE pnObject = 11
  640.       DO CASE
  641.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  642.           @ 8, 3 SAY "Delivery instructions" COLOR n/w
  643.         CASE pc_data = BN_HILITE
  644.           @ 8, 3 SAY "Delivery instructions" COLOR w+/w
  645.         CASE pc_data = BN_DISABLE
  646.           @ 8, 3 SAY "Delivery instructions" COLOR n+/w
  647.         CASE pc_data = BN_COLOR
  648.           @ 8, 3 SAY "Delivery instructions" COLOR n/w
  649.       ENDCASE
  650.       IF pc_data <> BN_DISABLE
  651.         @ 8, 3 SAY "D" COLOR gr+/w
  652.       ENDIF
  653.   ENDCASE
  654.  
  655. RETURN
  656. *-- EOP: TStatic WITH pn_msg, pc_data, pnObject
  657.  
  658. PROCEDURE HasTitle
  659. PARAMETERS pnObject, pnWay
  660. *----------------------------------------------------------------------------
  661. * NAME
  662. *   HasTitle - Display the label for the group of objects
  663. *
  664. * DESCRIPTION
  665. *
  666. * PARAMETERS
  667. *   pnObject   = nCurrent value for group item
  668. *   pnWay      = BN_HILITE, BN_UNHILITE, or BN_DISABLE
  669. *
  670. *----------------------------------------------------------------------------
  671.   DO CASE
  672.     CASE pnObject = 5
  673.       DO TStatic WITH WM_PAINT, pnWay, 3
  674.     CASE pnObject = 7
  675.       DO TStatic WITH WM_PAINT, pnWay, 3
  676.     CASE pnObject = 9
  677.       DO TStatic WITH WM_PAINT, pnWay, 3
  678.     CASE pnObject = 6
  679.       DO TStatic WITH WM_PAINT, pnWay, 4
  680.     CASE pnObject = 8
  681.       DO TStatic WITH WM_PAINT, pnWay, 4
  682.     CASE pnObject = 10
  683.       DO TStatic WITH WM_PAINT, pnWay, 4
  684.     CASE pnObject = 12
  685.       DO TStatic WITH WM_PAINT, pnWay, 11
  686.  
  687.   ENDCASE
  688.  
  689. *-- EOP: HasTitle WITH pnObject, pnWay
  690.  
  691.  
  692.  
  693. FUNCTION GetMess
  694. *----------------------------------------------------------------------------
  695. * NAME
  696. *   GetMess() -
  697. * DEPENDENCIES
  698. *   Uses nCurrent to determine the wait state for the given object.
  699. *----------------------------------------------------------------------------
  700.   PRIVATE lRtn
  701.  
  702.   DO CASE
  703.     CASE nCurrent = 5                   && CK_CHEZ_1
  704.       DO GetWait
  705.     CASE nCurrent = 7                   && CK_CHEZ_2
  706.       DO GetWait
  707.     CASE nCurrent = 9                   && CK_CHEZ_3
  708.       DO GetWait
  709.     CASE nCurrent = 6                   && RB_CONS_1
  710.       DO GetWait
  711.     CASE nCurrent = 8                   && RB_CONS_2
  712.       DO GetWait
  713.     CASE nCurrent = 10                  && RB_CONS_3
  714.       DO GetWait
  715.     CASE nCurrent = 12                  && EF_DELV_1
  716.       ON KEY LABEL F1 DO DlgHlpHd
  717.       DO GetEdit
  718.       ON KEY LABEL F1
  719.     CASE nCurrent = 13                  && BT_OK
  720.       DO GetWait
  721.     CASE nCurrent = 14                  && BT_CANCEL
  722.       DO TButton WITH WM_PAINT, BN_UNHILITE, 13
  723.       BT_CANCEL = .F.
  724.       DO GetWait
  725.   ENDCASE
  726.  
  727.   IF nMess = KB_F1
  728.     DO _HelpSys WITH cDialog, ;
  729.        LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  730.              aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  731.        cHelpFile
  732.   ENDIF
  733.  
  734.   IF nMess = KB_ESC
  735.     lRtn = .T.
  736.   ELSE
  737.     lRtn = .F.
  738.   ENDIF
  739.  
  740. RETURN lRtn
  741. *-- EOF: GetMess(  )
  742.  
  743. PROCEDURE DlgHlpHd
  744. *----------------------------------------------------------------------------
  745. * NAME
  746. *   DlgHlpHd - 
  747. *
  748. * DESCRIPTION
  749. *
  750. *----------------------------------------------------------------------------
  751.     DO _HelpSys WITH cDialog, ;
  752.        LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  753.              aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  754.        cHelpFile
  755.     nMess = 0
  756.  
  757. RETURN
  758. *-- EOP: DlgHlpHd
  759.  
  760.  
  761. PROCEDURE GetWait
  762. *----------------------------------------------------------------------------
  763. * NAME
  764. *   GetWait -
  765. *
  766. * DESCRIPTION
  767. *
  768. *----------------------------------------------------------------------------
  769.   nMess = 0
  770.   nAccel = 0
  771.  
  772.   lButtAct = .T.
  773.   DO TButton WITH WM_PAINT, BN_HILITE, nCurrent
  774.  
  775.   SET CONSOLE OFF
  776.   SET CURSOR OFF
  777.   WAIT
  778.   SET CONSOLE ON
  779.  
  780.   nMess = LASTKEY()
  781.   nMRow = MROW()
  782.   nMCol = MCOL()
  783.  
  784. RETURN
  785. *-- EOP: GetWait
  786.  
  787.  
  788. PROCEDURE TButton
  789. PARAMETERS pn_msg, pc_data, pnObject
  790. *----------------------------------------------------------------------------
  791. * NAME
  792. *   TButton -
  793. *
  794. * DESCRIPTION
  795. *
  796. * PARAMETERS
  797. *   pn_msg     =
  798. *   pc_data    =
  799. *   pnObject   =
  800. *
  801. *----------------------------------------------------------------------------
  802.   DO CASE
  803.     CASE pnObject = 5                   && CK_CHEZ_1
  804.       DO CASE
  805.         CASE pn_msg = WM_PAINT
  806.           DO CASE
  807.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  808.               @ 3, 4 SAY "[ ] Hvarti    " COLOR n/gb
  809.               @ 3, 5 SAY IIF( CK_CHEZ_1 , "X"," " ) COLOR n/gb
  810.             CASE pc_data = BN_HILITE
  811.               @ 3, 4 SAY "[ ] Hvarti    " COLOR w+/gb
  812.               @ 3, 5 SAY IIF( CK_CHEZ_1 , "X"," " ) COLOR w+/gb
  813.             CASE pc_data = BN_DISABLE
  814.               @ 3, 4 SAY "[ ] Hvarti    " COLOR n+/gb
  815.               @ 3, 5 SAY IIF( CK_CHEZ_1 , "X"," " ) COLOR n+/gb
  816.           ENDCASE
  817.           IF pc_data <> BN_DISABLE
  818.             @ 3, 8 SAY "H" COLOR gr+/gb
  819.           ENDIF
  820.         CASE pn_msg = BN_CLICKED
  821.           IF CK_CHEZ_1
  822.             STORE .F. TO CK_CHEZ_1
  823.           ELSE
  824.             STORE .T. TO CK_CHEZ_1
  825.           ENDIF
  826.  
  827.           DO TButton WITH WM_PAINT, BN_HILITE, 5
  828.       ENDCASE
  829.     CASE pnObject = 7                   && CK_CHEZ_2
  830.       DO CASE
  831.         CASE pn_msg = WM_PAINT
  832.           DO CASE
  833.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  834.               @ 4, 4 SAY "[ ] Tilset    " COLOR n/gb
  835.               @ 4, 5 SAY IIF( CK_CHEZ_2 , "X"," " ) COLOR n/gb
  836.             CASE pc_data = BN_HILITE
  837.               @ 4, 4 SAY "[ ] Tilset    " COLOR w+/gb
  838.               @ 4, 5 SAY IIF( CK_CHEZ_2 , "X"," " ) COLOR w+/gb
  839.             CASE pc_data = BN_DISABLE
  840.               @ 4, 4 SAY "[ ] Tilset    " COLOR n+/gb
  841.               @ 4, 5 SAY IIF( CK_CHEZ_2 , "X"," " ) COLOR n+/gb
  842.           ENDCASE
  843.           IF pc_data <> BN_DISABLE
  844.             @ 4, 8 SAY "T" COLOR gr+/gb
  845.           ENDIF
  846.         CASE pn_msg = BN_CLICKED
  847.           IF CK_CHEZ_2
  848.             STORE .F. TO CK_CHEZ_2
  849.           ELSE
  850.             STORE .T. TO CK_CHEZ_2
  851.           ENDIF
  852.  
  853.           DO TButton WITH WM_PAINT, BN_HILITE, 7
  854.       ENDCASE
  855.     CASE pnObject = 9                   && CK_CHEZ_3
  856.       DO CASE
  857.         CASE pn_msg = WM_PAINT
  858.           DO CASE
  859.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  860.               @ 5, 4 SAY "[ ] Jarlsberg " COLOR n/gb
  861.               @ 5, 5 SAY IIF( CK_CHEZ_3 , "X"," " ) COLOR n/gb
  862.             CASE pc_data = BN_HILITE
  863.               @ 5, 4 SAY "[ ] Jarlsberg " COLOR w+/gb
  864.               @ 5, 5 SAY IIF( CK_CHEZ_3 , "X"," " ) COLOR w+/gb
  865.             CASE pc_data = BN_DISABLE
  866.               @ 5, 4 SAY "[ ] Jarlsberg " COLOR n+/gb
  867.               @ 5, 5 SAY IIF( CK_CHEZ_3 , "X"," " ) COLOR n+/gb
  868.           ENDCASE
  869.           IF pc_data <> BN_DISABLE
  870.             @ 5, 8 SAY "J" COLOR gr+/gb
  871.           ENDIF
  872.         CASE pn_msg = BN_CLICKED
  873.           IF CK_CHEZ_3
  874.             STORE .F. TO CK_CHEZ_3
  875.           ELSE
  876.             STORE .T. TO CK_CHEZ_3
  877.           ENDIF
  878.  
  879.           DO TButton WITH WM_PAINT, BN_HILITE, 9
  880.       ENDCASE
  881.     CASE pnObject = 6                   && RB_CONS_1
  882.       DO CASE
  883.         CASE pn_msg = WM_PAINT
  884.           DO CASE
  885.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  886.               @ 3, 27 SAY "( ) Solid  " COLOR n/gb
  887.               IF RB_CONS_1
  888.                 @ 3, 28 TO 3, 28 7 COLOR n/gb
  889.               ELSE
  890.                 @ 3, 28 SAY " " COLOR n/gb
  891.               ENDIF
  892.             CASE pc_data = BN_HILITE
  893.               @ 3, 27 SAY "( ) Solid  " COLOR w+/gb
  894.               IF RB_CONS_1
  895.                 @ 3, 28 TO 3, 28 7 COLOR w+/gb
  896.               ELSE
  897.                 @ 3, 28 SAY " " COLOR w+/gb
  898.               ENDIF
  899.             CASE pc_data = BN_DISABLE
  900.               @ 3, 27 SAY "( ) Solid  " COLOR n+/gb
  901.               IF RB_CONS_1
  902.                 @ 3, 28 TO 3, 28 7 COLOR n+/gb
  903.               ELSE
  904.                 @ 3, 28 SAY " " COLOR n+/gb
  905.               ENDIF
  906.           ENDCASE
  907.           IF pc_data <> BN_DISABLE
  908.             @ 3, 31 SAY "S" COLOR gr+/gb
  909.           ENDIF
  910.         CASE pn_msg = BN_CLICKED
  911.           IF RB_CONS_1
  912.             STORE .F. TO RB_CONS_1
  913.           ELSE
  914.             STORE .T. TO RB_CONS_1
  915.           ENDIF
  916.  
  917.       ENDCASE
  918.     CASE pnObject = 8                   && RB_CONS_2
  919.       DO CASE
  920.         CASE pn_msg = WM_PAINT
  921.           DO CASE
  922.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  923.               @ 4, 27 SAY "( ) Runny  " COLOR n/gb
  924.               IF RB_CONS_2
  925.                 @ 4, 28 TO 4, 28 7 COLOR n/gb
  926.               ELSE
  927.                 @ 4, 28 SAY " " COLOR n/gb
  928.               ENDIF
  929.             CASE pc_data = BN_HILITE
  930.               @ 4, 27 SAY "( ) Runny  " COLOR w+/gb
  931.               IF RB_CONS_2
  932.                 @ 4, 28 TO 4, 28 7 COLOR w+/gb
  933.               ELSE
  934.                 @ 4, 28 SAY " " COLOR w+/gb
  935.               ENDIF
  936.             CASE pc_data = BN_DISABLE
  937.               @ 4, 27 SAY "( ) Runny  " COLOR n+/gb
  938.               IF RB_CONS_2
  939.                 @ 4, 28 TO 4, 28 7 COLOR n+/gb
  940.               ELSE
  941.                 @ 4, 28 SAY " " COLOR n+/gb
  942.               ENDIF
  943.           ENDCASE
  944.           IF pc_data <> BN_DISABLE
  945.             @ 4, 31 SAY "R" COLOR gr+/gb
  946.           ENDIF
  947.         CASE pn_msg = BN_CLICKED
  948.           IF RB_CONS_2
  949.             STORE .F. TO RB_CONS_2
  950.           ELSE
  951.             STORE .T. TO RB_CONS_2
  952.           ENDIF
  953.  
  954.       ENDCASE
  955.     CASE pnObject = 10                  && RB_CONS_3
  956.       DO CASE
  957.         CASE pn_msg = WM_PAINT
  958.           DO CASE
  959.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  960.               @ 5, 27 SAY "( ) Melted " COLOR n/gb
  961.               IF RB_CONS_3
  962.                 @ 5, 28 TO 5, 28 7 COLOR n/gb
  963.               ELSE
  964.                 @ 5, 28 SAY " " COLOR n/gb
  965.               ENDIF
  966.             CASE pc_data = BN_HILITE
  967.               @ 5, 27 SAY "( ) Melted " COLOR w+/gb
  968.               IF RB_CONS_3
  969.                 @ 5, 28 TO 5, 28 7 COLOR w+/gb
  970.               ELSE
  971.                 @ 5, 28 SAY " " COLOR w+/gb
  972.               ENDIF
  973.             CASE pc_data = BN_DISABLE
  974.               @ 5, 27 SAY "( ) Melted " COLOR n+/gb
  975.               IF RB_CONS_3
  976.                 @ 5, 28 TO 5, 28 7 COLOR n+/gb
  977.               ELSE
  978.                 @ 5, 28 SAY " " COLOR n+/gb
  979.               ENDIF
  980.           ENDCASE
  981.           IF pc_data <> BN_DISABLE
  982.             @ 5, 31 SAY "M" COLOR gr+/gb
  983.           ENDIF
  984.         CASE pn_msg = BN_CLICKED
  985.           IF RB_CONS_3
  986.             STORE .F. TO RB_CONS_3
  987.           ELSE
  988.             STORE .T. TO RB_CONS_3
  989.           ENDIF
  990.  
  991.       ENDCASE
  992.     CASE pnObject = 13                  && BT_OK
  993.       DO CASE
  994.         CASE pn_msg = WM_PAINT
  995.           DO CASE
  996.             CASE pc_data = BN_PAINT
  997.               @ 11, 9 SAY "   Ok   " COLOR bg+/g
  998.             CASE pc_data = BN_HILITE
  999.               @ 11, 9 SAY "   Ok   " COLOR w+/g
  1000.             CASE pc_data = BN_UNHILITE
  1001.               @ 11, 9 SAY "   Ok   " COLOR n/g
  1002.             CASE pc_data = BN_DEFAULT
  1003.               @ 11, 9 SAY "   Ok   " COLOR bg+/g
  1004.             CASE pc_data = BN_DISABLE
  1005.               @ 11, 9 SAY "   Ok   " COLOR n+/g
  1006.             CASE pc_data = SE_SHADOW
  1007.               @ 12, 10 SAY "▀▀▀▀▀▀▀▀" COLOR n/w
  1008.               @ 11, 17 SAY "▄" COLOR n/w
  1009.             CASE pc_data = BN_PRESSED
  1010.               @ 12, 10 SAY SPACE( 8 ) COLOR n/w
  1011.               @ 11, 9 SAY " " COLOR n/w
  1012.               @ 11, 17 SAY " " COLOR n/w
  1013.               @ 11, 10 SAY "   Ok   " COLOR w+/g
  1014.           ENDCASE
  1015.           IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE
  1016.             @ 11, 12 SAY "O" COLOR gr+/g
  1017.           ENDIF
  1018.         CASE pn_msg = BN_CLICKED
  1019.           DO TButton WITH WM_PAINT, BN_PRESSED, 13
  1020.           x = INKEY( .2 )
  1021.           nMess = DLN_OK
  1022.           DO TButton WITH WM_PAINT, BN_PAINT, 13
  1023.           DO TButton WITH WM_PAINT, SE_SHADOW, 13
  1024.       ENDCASE
  1025.  
  1026.     CASE pnObject = 14                  && BT_CANCEL
  1027.       DO CASE
  1028.         CASE pn_msg = WM_PAINT
  1029.           DO CASE
  1030.             CASE pc_data = BN_PAINT
  1031.               @ 11, 23 SAY " Cancel " COLOR n/g
  1032.             CASE pc_data = BN_HILITE
  1033.               @ 11, 23 SAY " Cancel " COLOR w+/g
  1034.             CASE pc_data = BN_UNHILITE
  1035.               @ 11, 23 SAY " Cancel " COLOR n/g
  1036.             CASE pc_data = BN_DEFAULT
  1037.               @ 11, 23 SAY " Cancel " COLOR bg+/g
  1038.             CASE pc_data = BN_DISABLE
  1039.               @ 11, 23 SAY " Cancel " COLOR n+/g
  1040.             CASE pc_data = SE_SHADOW
  1041.               @ 12, 24 SAY "▀▀▀▀▀▀▀▀" COLOR n/w
  1042.               @ 11, 31 SAY "▄" COLOR n/w
  1043.             CASE pc_data = BN_PRESSED
  1044.               @ 12, 24 SAY SPACE( 8 ) COLOR n/w
  1045.               @ 11, 23 SAY " " COLOR n/w
  1046.               @ 11, 31 SAY " " COLOR n/w
  1047.               @ 11, 24 SAY " Cancel " COLOR w+/g
  1048.           ENDCASE
  1049.           IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE
  1050.             @ 11, 24 SAY "C" COLOR gr+/g
  1051.           ENDIF
  1052.         CASE pn_msg = BN_CLICKED
  1053.           DO TButton WITH WM_PAINT, BN_PRESSED, 14
  1054.           x = INKEY( .2 )
  1055.           nMess = DLN_CANCEL
  1056.           DO TButton WITH WM_PAINT, BN_PAINT, 14
  1057.           DO TButton WITH WM_PAINT, SE_SHADOW, 14
  1058.       ENDCASE
  1059.  
  1060.   ENDCASE
  1061.  
  1062. RETURN
  1063. *-- EOP: TButton WITH pn_msg, pc_data, pnObject
  1064.  
  1065.  
  1066. PROCEDURE GetEdit
  1067. *----------------------------------------------------------------------------
  1068. * NAME
  1069. *   GetEdit -
  1070. *
  1071. * DESCRIPTION
  1072. *
  1073. *----------------------------------------------------------------------------
  1074.   PRIVATE lSkipRead
  1075.   lSkipRead = .F.
  1076.   nMess = 0
  1077.   nAccel = 0
  1078.  
  1079.   nMsEvent = 0
  1080.   ON MOUSE DO MsHand WITH MROW(), MCOL()
  1081.   DO SetOnKey
  1082.  
  1083.   DO CASE
  1084.     CASE nCurrent = 12
  1085.       @ 9, 3 GET EF_DELV_1 PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  1086.   ENDCASE
  1087.  
  1088.   IF .NOT. lSkipRead
  1089.     SET CURSOR ON
  1090.     READ
  1091.     SET CURSOR OFF
  1092.   ENDIF
  1093.  
  1094.   DO ClrOnKey
  1095.   ON MOUSE
  1096.  
  1097.   IF .NOT. lSkipRead
  1098.     IF nMsEvent = KB_MOUSE
  1099.       nMess = KB_MOUSE
  1100.     ELSE
  1101.       nMess = LASTKEY()
  1102.     ENDIF
  1103.   ELSE
  1104.     nMess = KB_DOWNARROW
  1105.   ENDIF
  1106.  
  1107. RETURN
  1108. *-- EOP: GetEdit
  1109.  
  1110.  
  1111. PROCEDURE TEdit
  1112. PARAMETERS pn_msg, p__data, pnObject
  1113. *----------------------------------------------------------------------------
  1114. * NAME
  1115. *   TEdit -
  1116. *
  1117. * DESCRIPTION
  1118. *
  1119. * PARAMETERS
  1120. *   pn_msg     =
  1121. *   p__data    =
  1122. *   pnObject   =
  1123. *
  1124. *----------------------------------------------------------------------------
  1125.   DO CASE
  1126.     CASE pnObject = 12                   && EF_DELV_1
  1127.       DO CASE
  1128.         CASE p__data = EN_KILLFOC
  1129.           @ 9, 3 GET EF_DELV_1 PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  1130.           CLEAR GETS
  1131.       ENDCASE
  1132.  
  1133.  
  1134.   ENDCASE
  1135.  
  1136. RETURN
  1137. *-- EOP: TEdit WITH pn_msg, p__data, pnObject
  1138.  
  1139. PROCEDURE SetOnKey
  1140. *----------------------------------------------------------------------------
  1141. * NAME
  1142. *   SetOnKey - For each pick key, set on key label
  1143. *
  1144. * DESCRIPTION
  1145. *
  1146. *----------------------------------------------------------------------------
  1147.  
  1148.   ON KEY LABEL Alt-H DO AKeyHand WITH '5'
  1149.   ON KEY LABEL Alt-T DO AKeyHand WITH '7'
  1150.   ON KEY LABEL Alt-J DO AKeyHand WITH '9'
  1151.   ON KEY LABEL Alt-S DO AKeyHand WITH '6'
  1152.   ON KEY LABEL Alt-R DO AKeyHand WITH '8'
  1153.   ON KEY LABEL Alt-M DO AKeyHand WITH '10'
  1154.   ON KEY LABEL Alt-D DO AKeyHand WITH '12'
  1155.   ON KEY LABEL Alt-O DO AKeyHand WITH '13'
  1156.   ON KEY LABEL Alt-C DO AKeyHand WITH '14'
  1157.  
  1158. RETURN
  1159. *-- EOP: SetOnKey
  1160.  
  1161.  
  1162. PROCEDURE ClrOnKey
  1163. *----------------------------------------------------------------------------
  1164. * NAME
  1165. *   ClrOnKey - For each pick key, clear on label
  1166. *
  1167. * DESCRIPTION
  1168. *
  1169. *----------------------------------------------------------------------------
  1170.  
  1171.   ON KEY LABEL Alt-H
  1172.   ON KEY LABEL Alt-T
  1173.   ON KEY LABEL Alt-J
  1174.   ON KEY LABEL Alt-S
  1175.   ON KEY LABEL Alt-R
  1176.   ON KEY LABEL Alt-M
  1177.   ON KEY LABEL Alt-D
  1178.   ON KEY LABEL Alt-O
  1179.   ON KEY LABEL Alt-C
  1180.  
  1181. RETURN
  1182. *-- EOP: ClrOnKey
  1183.  
  1184.  
  1185. PROCEDURE AKeyHand
  1186. PARAMETERS cId
  1187. *----------------------------------------------------------------------------
  1188. * NAME
  1189. *   AKeyHand - On key handler for Accel key from popup or get
  1190. *
  1191. * DESCRIPTION
  1192. *
  1193. * PARAMETERS
  1194. *   nId        =
  1195. *
  1196. *----------------------------------------------------------------------------
  1197.  
  1198.   IF nAccel <> nCurrent
  1199.     nAccel = VAL( cId )
  1200.     KEYBOARD "{Ctrl-W}"
  1201.     nMess = KB_CTRLW
  1202.   ELSE
  1203.     nAccel = 0
  1204.   ENDIF
  1205.  
  1206. RETURN
  1207. *-- EOP: AKeyHand WITH nId
  1208.  
  1209.  
  1210. PROCEDURE CkWaitAc
  1211. *----------------------------------------------------------------------------
  1212. * NAME
  1213. *   CkWaitAc - Look for Accel key from Wait command
  1214. *
  1215. * DESCRIPTION
  1216. *   This routine has high International risk for translations.
  1217. *----------------------------------------------------------------------------
  1218.  
  1219.   IF nMess < 0
  1220.     nAccPress = nMess + 500
  1221.   ELSE
  1222.     IF nMess >= 97 .AND. nMess <= 122
  1223.       nMess = nMess - 32
  1224.     ENDIF
  1225.     nAccPress = nMess
  1226.   ENDIF
  1227.  
  1228.   DO CASE
  1229.     CASE nAccPress = 72                  && H - CK_CHEZ_1
  1230.       nAccel = 5
  1231.     CASE nAccPress = 84                  && T - CK_CHEZ_2
  1232.       nAccel = 7
  1233.     CASE nAccPress = 74                  && J - CK_CHEZ_3
  1234.       nAccel = 9
  1235.     CASE nAccPress = 83                  && S - RB_CONS_1
  1236.       nAccel = 6
  1237.     CASE nAccPress = 82                  && R - RB_CONS_2
  1238.       nAccel = 8
  1239.     CASE nAccPress = 77                  && M - RB_CONS_3
  1240.       nAccel = 10
  1241.     CASE nAccPress = 68                  && D - EF_DELV_0
  1242.       nAccel = 12
  1243.     CASE nAccPress = 79                  && O - BT_OK
  1244.       nAccel = 13
  1245.     CASE nAccPress = 67                  && C - BT_CANCEL
  1246.       nAccel = 14
  1247.     OTHERWISE
  1248.       nAccel = 0
  1249.   ENDCASE
  1250.  
  1251. RETURN
  1252. *-- EOP: CkWaitAc
  1253.  
  1254.  
  1255. FUNCTION GetMsTo
  1256. PARAMETER plChkOnly
  1257. *----------------------------------------------------------------------------
  1258. * NAME
  1259. *   GetMsTo() -
  1260. *
  1261. * DESCRIPTION
  1262. *
  1263. *----------------------------------------------------------------------------
  1264.  
  1265.   *-- Check for a click on the close button
  1266.   IF nMRow = nRowCls .AND. nMCol >= nLColCls .AND. nMCol <= nRColCls
  1267.     nMess = DLN_CANCEL
  1268.     nRtn = 0
  1269.   ELSE
  1270.     IF nMRow = nRowCls .AND. nMCol >= nCol .AND. nMCol <= nRWinCol
  1271.       *---------------------------------------------------------
  1272.       *-- All this to remove the shadow before moving the window
  1273.       *---------------------------------------------------------
  1274.       SAVE WINDOW TVDIAL TO _TVDIAL
  1275.       RELEASE WINDOW TVDIAL
  1276.       RESTORE SCREEN FROM TVDIAL
  1277.       RESTORE WINDOW TVDIAL FROM _TVDIAL
  1278.       ERASE _TVDIAL.win
  1279.       ACTIVATE WINDOW TVDIAL
  1280.  
  1281.       @ 0, 0 TO nHigh - 1, nWidth - 1 COLOR g+/w
  1282.       @ 0, 2 SAY "[ ]" COLOR g+/w
  1283.       @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  1284.       @ 0, 13 SAY "Demo Dialog Box" COLOR g+/w
  1285.  
  1286.       *-------------------------------
  1287.       *-- Start the move window action
  1288.       *-------------------------------
  1289.       nDelX = nMRow
  1290.       nDelY = nMCol
  1291.  
  1292.       SET CONSOLE OFF
  1293.       WAIT
  1294.       SET CONSOLE ON
  1295.  
  1296.       nMRow = MROW()
  1297.       nMCol = MCOL()
  1298.       nDelX = nMRow - nDelX
  1299.       nDelY = nMCol - nDelY
  1300.       lMoveOk = .T.
  1301.       ON ERROR lMoveOk = .F.
  1302.       MOVE WINDOW TVDIAL BY nDelX, nDelY
  1303.       ON ERROR
  1304.       IF lMoveOk
  1305.         nRowCls   = nRowCls + nDelX
  1306.         nCol      = nCol + nDelY
  1307.         nLColCls  = ncol + 2            && Left column for close button
  1308.         nRColCls  = ncol + 4            && End column for close button
  1309.         nRWinCol  = ncol + nWidth - 1   && Rigth column for window
  1310.         nXOffset  = nRowCls - nOrigRow
  1311.         nYOffset  = nCol    - nOrigCol
  1312.       ENDIF
  1313.  
  1314.       *---------------------------------------------------------
  1315.       *-- Display the new shadow for after moving the dialog box
  1316.       *---------------------------------------------------------
  1317.       SAVE WINDOW TVDIAL TO _TVDIAL
  1318.       RELEASE WINDOW TVDIAL
  1319.       RESTORE SCREEN FROM TVDIAL
  1320.       ACTIVATE SCREEN
  1321.       IF nCol + 42 < 80 .AND. nRowCls + 14 <= nScreen
  1322.         @ nRowCls + 1, nCol + 1 FILL TO nRowCls + 14, nCol + 42 COLOR n+/n
  1323.       ENDIF
  1324.       RESTORE WINDOW TVDIAL FROM _TVDIAL
  1325.       ERASE _TVDIAL.win
  1326.       ACTIVATE WINDOW TVDIAL
  1327.  
  1328.       @ 0, 0 TO nHigh - 1, nWidth - 1 DOUBLE COLOR w+/w
  1329.       @ 0, 2 SAY "[ ]" COLOR w+/w
  1330.       @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  1331.       @ 0, 13 SAY "Demo Dialog Box" COLOR w+/w
  1332.  
  1333.       nRtn = -1
  1334.     ELSE
  1335.       *-----------------------------------
  1336.       *-- Check for click on a live object
  1337.       *-----------------------------------
  1338.       nRtn = 0
  1339.       i = 1
  1340.       DO WHILE i <= nClkObj
  1341.         IF nMRow =  aClkObj[ i, 1 ] + nXOffSet .AND. ;
  1342.            nMCol >= aClkObj[ i, 2 ] + nYOffset .AND. ;
  1343.            nMCol <= aClkObj[ i, 3 ] + nYOffset
  1344.           nRtn = aClkObj[ i, 4 ]
  1345.           EXIT
  1346.         ENDIF
  1347.         i = i + 1
  1348.       ENDDO
  1349.  
  1350.       IF nRtn = 0
  1351.         *----------------------------------------------------------
  1352.         *-- Not found, check for a click in a Combo box or list box
  1353.         *----------------------------------------------------------
  1354.         IF nClkBox > 0
  1355.           i = 1
  1356.           DO WHILE i <= nClkBox
  1357.             IF nMRow >= aClkBox[ i, 1 ] + nXOffset .AND. ;
  1358.                nMRow <= aClkBox[ i, 1 ] + nXOffset + aClkBox[ i, 2 ] .AND. ;
  1359.                nMCol >= aClkBox[ i, 3 ] + nYOffset .AND. ;
  1360.                nMCol <= aClkBox[ i, 3 ] + nYOffset + aClkBox[ i, 4 ]
  1361.               nRtn = aClkBox[ i, 5 ] - 1
  1362.               aClkBox[ i, 6 ] = .T.
  1363.               EXIT
  1364.             ENDIF
  1365.             i = i + 1
  1366.           ENDDO
  1367.         ENDIF
  1368.       ENDIF
  1369.  
  1370.     ENDIF
  1371.   ENDIF
  1372.  
  1373. RETURN( nRtn )
  1374. *-- EOF: GetMsTo(  )
  1375.  
  1376.  
  1377. PROCEDURE MsHand
  1378. PARAMETERS pnMRow, pnMCol, pl_IsPop
  1379. *----------------------------------------------------------------------------
  1380. * NAME
  1381. *   MsHand -
  1382. *
  1383. * DESCRIPTION
  1384. *
  1385. * PARAMETERS
  1386. *   pnMRow     =
  1387. *   pnMCol     =
  1388. *   pl_IsPop   =
  1389. *
  1390. *----------------------------------------------------------------------------
  1391.   nMRow = pnMRow
  1392.   nMCol = pnMCol
  1393.   nMsEvent = KB_MOUSE
  1394.  
  1395.   KEYBOARD "{Ctrl-W}"
  1396.  
  1397. RETURN
  1398. *-- EOP: MsHand WITH pnMRow, pnMCol, pl_IsPop
  1399.  
  1400.  
  1401. PROCEDURE Dispatch
  1402. *----------------------------------------------------------------------------
  1403. * NAME
  1404. *   Dispatch -
  1405. *
  1406. * DESCRIPTION
  1407. *
  1408. *----------------------------------------------------------------------------
  1409.   DO CASE
  1410.     CASE nCurrent = 5                    && CK_CHEZ_1
  1411.       DO DispCk
  1412.     CASE nCurrent = 7                    && CK_CHEZ_2
  1413.       DO DispCk
  1414.     CASE nCurrent = 9                    && CK_CHEZ_3
  1415.       DO DispCk
  1416.     CASE nCurrent = 6                    && RB_CONS_1
  1417.       DO DispRb
  1418.     CASE nCurrent = 8                    && RB_CONS_2
  1419.       DO DispRb
  1420.     CASE nCurrent = 10                   && RB_CONS_3
  1421.       DO DispRb
  1422.     CASE nCurrent = 12                   && EF_DELV_1
  1423.       DO DispEf
  1424.     CASE nCurrent = 13                   && BT_OK
  1425.       DO DispBt
  1426.     CASE nCurrent = 14                   && BT_CANCEL
  1427.       DO DispBt
  1428.   ENDCASE
  1429.  
  1430. RETURN
  1431. *-- EOP: Dispatch
  1432.  
  1433.  
  1434. PROCEDURE DispRb
  1435. *----------------------------------------------------------------------------
  1436. * NAME
  1437. *   DispRb -
  1438. *
  1439. * DESCRIPTION
  1440. *
  1441. *----------------------------------------------------------------------------
  1442.   PRIVATE nPossNext
  1443.  
  1444.   DO CASE
  1445.     CASE nMess = KB_TAB
  1446.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1447.       DO GetNext WITH .T.
  1448.     CASE nMess = KB_SHIFTTAB
  1449.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1450.       DO GetNext WITH .F.
  1451.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  1452.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1453.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1454.       DO GetNext WITH .F., .T.
  1455.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1456.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  1457.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1458.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1459.       DO GetNext WITH .T., .T.
  1460.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1461.  
  1462.     CASE nMess = KB_MOUSE
  1463.       nPossNext = GetMsTo()
  1464.       IF nPossNext > 0
  1465.         IF nPossNext <> nCurrent
  1466.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1467.           DO GetNext WITH nPossNext, .F.
  1468.         ENDIF
  1469.       ENDIF
  1470.  
  1471.     CASE nMess = KB_ENTER
  1472.       IF nDlgDef > 0
  1473.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  1474.       ENDIF
  1475.  
  1476.     OTHERWISE
  1477.       DO CkWaitAc
  1478.       IF nAccel > 0
  1479.         IF nAccel <> nCurrent
  1480.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1481.           DO GetNext WITH nAccel, .F.
  1482.         ENDIF
  1483.       ENDIF
  1484.  
  1485.   ENDCASE
  1486.  
  1487. RETURN
  1488. *-- EOP: DispRb
  1489.  
  1490.  
  1491. PROCEDURE DispCk
  1492. *----------------------------------------------------------------------------
  1493. * NAME
  1494. *   DispCk -
  1495. *
  1496. * DESCRIPTION
  1497. *
  1498. *----------------------------------------------------------------------------
  1499.   PRIVATE nPossNext
  1500.  
  1501.   DO CASE
  1502.     CASE nMess = KB_TAB
  1503.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1504.       DO GetNext WITH .T.
  1505.     CASE nMess = KB_SHIFTTAB
  1506.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1507.       DO GetNext WITH .F.
  1508.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  1509.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1510.       DO GetNext WITH .F., .T.
  1511.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  1512.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1513.       DO GetNext WITH .T., .T.
  1514.     CASE nMess = KB_SPACE
  1515.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1516.  
  1517.     CASE nMess = KB_MOUSE
  1518.       nPossNext = GetMsTo()
  1519.       IF nPossNext > 0
  1520.         IF nPossNext = nCurrent
  1521.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1522.         ELSE
  1523.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1524.           DO GetNext WITH nPossNext, .F.
  1525.         ENDIF
  1526.       ENDIF
  1527.  
  1528.     CASE nMess = KB_ENTER
  1529.       IF nDlgDef > 0
  1530.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  1531.       ENDIF
  1532.  
  1533.     OTHERWISE
  1534.       DO CkWaitAc
  1535.       IF nAccel > 0
  1536.         IF nAccel = nCurrent
  1537.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1538.         ELSE
  1539.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1540.           DO GetNext WITH nAccel, .F.
  1541.         ENDIF
  1542.       ENDIF
  1543.  
  1544.   ENDCASE
  1545.  
  1546. RETURN
  1547. *-- EOP: DispCk
  1548.  
  1549.  
  1550. PROCEDURE DispBt
  1551. *----------------------------------------------------------------------------
  1552. * NAME
  1553. *   DispBt -
  1554. *
  1555. * DESCRIPTION
  1556. *
  1557. *----------------------------------------------------------------------------
  1558.   PRIVATE nPossNext
  1559.   DO CASE
  1560.     CASE nMess = KB_TAB
  1561.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1562.       DO GetNext WITH .T.
  1563.     CASE nMess = KB_SHIFTTAB
  1564.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1565.       DO GetNext WITH .F.
  1566.     CASE nMess = KB_ENTER
  1567.       DO TButton WITH BN_CLICKED, .F., nCurrent
  1568.     CASE nMess = KB_MOUSE
  1569.       nPossNext = GetMsTo()
  1570.       IF nPossNext > 0
  1571.         IF nPossNext = nCurrent
  1572.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1573.         ELSE
  1574.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1575.           DO GetNext WITH nPossNext, .F.
  1576.         ENDIF
  1577.       ENDIF
  1578.     OTHERWISE
  1579.       DO CkWaitAc
  1580.       IF nAccel > 0
  1581.         IF nAccel = nCurrent
  1582.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1583.         ELSE
  1584.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1585.           DO GetNext WITH nAccel, .F.
  1586.         ENDIF
  1587.       ENDIF
  1588.   ENDCASE
  1589.  
  1590. RETURN
  1591. *-- EOP: DispBt
  1592.  
  1593.  
  1594. PROCEDURE DispEf
  1595. *----------------------------------------------------------------------------
  1596. * NAME
  1597. *   DispEf -
  1598. *
  1599. * DESCRIPTION
  1600. *
  1601. *----------------------------------------------------------------------------
  1602.   PRIVATE nPossNext
  1603.   DO CASE
  1604.     CASE nMess = KB_TAB
  1605.       DO GetNext WITH .T.
  1606.     CASE nMess = KB_SHIFTTAB
  1607.       DO GetNext WITH .F.
  1608.     CASE nMess = KB_ENTER
  1609.       IF nDlgDef > 0
  1610.         DO GetNext WITH nDlgDef
  1611.         IF nCurrent = nDlgDef
  1612.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  1613.         ENDIF
  1614.       ENDIF
  1615.     CASE nMess = KB_UPARROW
  1616.       DO GetNext WITH .F., .T.
  1617.     CASE nMess = KB_DOWNARROW
  1618.       DO GetNext WITH .T., .T.
  1619.     CASE nMess = KB_MOUSE
  1620.       nPossNext = GetMsTo()
  1621.       IF nPossNext > 0
  1622.         DO GetNext WITH nPossNext, .F.
  1623.       ENDIF
  1624.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  1625.       DO GetNext WITH nAccel, .F.
  1626.   ENDCASE
  1627.  
  1628. RETURN
  1629. *-- EOP: DispEf
  1630.  
  1631.  
  1632. PROCEDURE GetNext
  1633. PARAMETERS p__dir, pl_SameGrp
  1634. *----------------------------------------------------------------------------
  1635. * NAME
  1636. *   GetNext -
  1637. *
  1638. * DESCRIPTION
  1639. *
  1640. * PARAMETERS
  1641. *   p__dir     = .T. to go forward, .F. to go back, number to go to
  1642. *                record number.
  1643. *   pl_SameGrp = .F. to go to first item in next/prev group, .T. will
  1644. *                go to the next/prev item within the same group.  Only
  1645. *                applies to p__dir being next/previous.
  1646. *
  1647. *----------------------------------------------------------------------------
  1648.   PRIVATE cPrevClass, nWay, npCurrent, nPointer, nNextObj, nNextPtr
  1649.   PRIVATE nRecNo, npRecNo, lExit, cField, cVar, cCurrClass
  1650.  
  1651.   *------------------------------------------
  1652.   *-- Check for move out of the current group
  1653.   *------------------------------------------
  1654.   IF .NOT. pl_SameGrp
  1655.     IF TYPE( "p__dir" ) = "L"
  1656.       DO HasTitle WITH nCurrent, BN_UNHILITE
  1657.     ENDIF
  1658.   ENDIF
  1659.  
  1660.   cPrevClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )
  1661.  
  1662.  
  1663.   *--------------------------------------------------
  1664.   *-- Set the current CK or RB pointer before leaving
  1665.   *--------------------------------------------------
  1666.   DO CASE
  1667.     CASE nCurrent = 5                    && CK_CHEZ_1
  1668.       STORE nCurrent TO nCK_CHEZ
  1669.     CASE nCurrent = 7                    && CK_CHEZ_2
  1670.       STORE nCurrent TO nCK_CHEZ
  1671.     CASE nCurrent = 9                    && CK_CHEZ_3
  1672.       STORE nCurrent TO nCK_CHEZ
  1673.     CASE nCurrent = 6                    && RB_CONS_1
  1674.       STORE nCurrent TO nRB_CONS
  1675.     CASE nCurrent = 8                    && RB_CONS_2
  1676.       STORE nCurrent TO nRB_CONS
  1677.     CASE nCurrent = 10                   && RB_CONS_3
  1678.       STORE nCurrent TO nRB_CONS
  1679.   ENDCASE
  1680.  
  1681.   *----------------------------------------
  1682.   *-- Handle the forward and backward moves
  1683.   *----------------------------------------
  1684.   IF TYPE( "p__dir" ) = "L"
  1685.     DO CASE
  1686.       *-------------------------------------------
  1687.       *-- Go forward or backward in the same group
  1688.       *-------------------------------------------
  1689.       CASE  pl_SameGrp
  1690.         nWay = IIF( p__dir, 10, 9 )  && 10 Forward, 9 Back
  1691.         npCurrent = aObjPoint[ nCurrent ]
  1692.         nPointer = npCurrent
  1693.         *-----------------------------------------------
  1694.         *-- Is this a one item radio button or check box
  1695.         *-----------------------------------------------
  1696.         IF aClkObj[ npCurrent, 4 ] <> aClkObj[ npCurrent, nWay ]
  1697.           DO WHILE .T.
  1698.             *------------------------------------------------------
  1699.             *-- Check to see if the next object's WHEN clause is Ok
  1700.             *------------------------------------------------------
  1701.             nNextObj = aClkObj[ nPointer, nWay ]
  1702.             IF WhenOk( nNextObj )
  1703.               nPointer = aObjPoint[ nNextObj ]
  1704.               EXIT
  1705.             ELSE
  1706.               *-----------------------------------------------
  1707.               *-- See if we looped back to the item we were on
  1708.               *-----------------------------------------------
  1709.               nNextPtr  = aObjPoint[ nNextObj ]
  1710.               IF nNextPtr = npCurrent
  1711.                 EXIT
  1712.               ELSE
  1713.                 nPointer = nNextPtr
  1714.               ENDIF
  1715.             ENDIF
  1716.           ENDDO
  1717.         ENDIF
  1718.         IF nPointer <> npCurrent
  1719.           nCurrent = aClkObj[ nPointer, 4 ]
  1720.           nCurrGrp = aClkObj[ nPointer, 5 ]
  1721.         ENDIF
  1722.       OTHERWISE
  1723.         nWay = IIF( p__dir, 6, 7 )  && 6 Forward, 7 Back
  1724.         nRecNo = nCurrent
  1725.         npRecNo = aObjPoint[ nRecNo ]
  1726.         lExit = .F.
  1727.         DO WHILE aClkObj[ npRecNo, 5 ] = nCurrGrp
  1728.           nRecNo = aClkObj[ npRecNo, nWay ]
  1729.           npRecNo = aObjPoint[ nRecNo ]
  1730.           IF aClkObj[ npRecNo, 5 ] = nCurrGrp
  1731.             LOOP
  1732.           ELSE
  1733.             *--------------------------------------------------
  1734.             *-- Finally, we have moved out of the current group
  1735.             *--------------------------------------------------
  1736.             nCurrGrp = aClkObj[ npRecNo, 5 ]
  1737.             IF .NOT. WhenOk( nRecNo )
  1738.               LOOP
  1739.             ELSE
  1740.               nCurrent = nRecNo
  1741.               lExit = .T.
  1742.             ENDIF
  1743.           ENDIF
  1744.  
  1745.           *---------------------------------------------------------
  1746.           *-- Was this a move into a radio button or check box group
  1747.           *---------------------------------------------------------
  1748.           cField = aClkObj[ npRecNo, 11 ]
  1749.           cVar   = "N" + LEFT( cField, RAT( "_", cField ) - 1 )
  1750.           DO CASE
  1751.             CASE cVar = "NCK_CHEZ"
  1752.               nRecNo = NCK_CHEZ
  1753.               npRecNo = aObjPoint[ nRecNo ]
  1754.               nCurrent = nRecNo
  1755.               nCurrGrp = aClkObj[ npRecNo, 5 ]
  1756.             CASE cVar = "NRB_CONS"
  1757.               nRecNo = NRB_CONS
  1758.               npRecNo = aObjPoint[ nRecNo ]
  1759.               nCurrent = nRecNo
  1760.               nCurrGrp = aClkObj[ npRecNo, 5 ]
  1761.           ENDCASE
  1762.           IF lExit
  1763.             EXIT
  1764.           ENDIF
  1765.         ENDDO
  1766.  
  1767.         DO HasTitle WITH nCurrent, BN_HILITE
  1768.  
  1769.     ENDCASE
  1770.  
  1771.   ELSE
  1772.  
  1773.     *-------------------------------------------------------
  1774.     *-- Handle direct moves to objects via Alt key and Mouse
  1775.     *-------------------------------------------------------
  1776.     IF .NOT. WhenOk( p__dir )
  1777.       nMess = 0
  1778.       RETURN
  1779.     ENDIF
  1780.  
  1781.     *--------------------------------------------------------------
  1782.     *-- Check to see if we are leaving or going into a radio button
  1783.     *-- group.  If so, we may have to toggle off the current dot.
  1784.     *--------------------------------------------------------------
  1785.     DO CASE
  1786.       *-----------------------------------------------------------
  1787.       *-- If the current object is a radio button and the group to
  1788.       *-- move into is the same, then...
  1789.       *-----------------------------------------------------------
  1790.       CASE LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 ) = "RB_" .AND. ;
  1791.            aClkObj[ aObjPoint[ p__dir ], 5 ] = nCurrGrp
  1792.  
  1793.         DO CASE
  1794.           CASE nCurrent = 6
  1795.             STORE .F. TO RB_CONS_1
  1796.             DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1797.           CASE nCurrent = 8
  1798.             STORE .F. TO RB_CONS_2
  1799.             DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1800.           CASE nCurrent = 10
  1801.             STORE .F. TO RB_CONS_3
  1802.             DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  1803.         ENDCASE
  1804.  
  1805.       *---------------------------------------------
  1806.       *-- If we are moving into a radio button group
  1807.       *---------------------------------------------
  1808.       CASE LEFT( aClkObj[ aObjPoint[ p__dir ], 11 ], 3 ) = "RB_"
  1809.         DO CASE
  1810.           CASE p__dir = 6
  1811.             IF p__dir <> nRB_CONS
  1812.               cField = aClkObj[ aObjPoint[ nRB_CONS ], 11 ]
  1813.               STORE .F. TO &cField
  1814.               DO TButton WITH WM_PAINT, BN_UNHILITE, nRB_CONS
  1815.             ENDIF
  1816.           CASE p__dir = 8
  1817.             IF p__dir <> nRB_CONS
  1818.               cField = aClkObj[ aObjPoint[ nRB_CONS ], 11 ]
  1819.               STORE .F. TO &cField
  1820.               DO TButton WITH WM_PAINT, BN_UNHILITE, nRB_CONS
  1821.             ENDIF
  1822.           CASE p__dir = 10
  1823.             IF p__dir <> nRB_CONS
  1824.               cField = aClkObj[ aObjPoint[ nRB_CONS ], 11 ]
  1825.               STORE .F. TO &cField
  1826.               DO TButton WITH WM_PAINT, BN_UNHILITE, nRB_CONS
  1827.             ENDIF
  1828.         ENDCASE
  1829.  
  1830.     ENDCASE
  1831.  
  1832.  
  1833.     IF nCurrGrp <> aClkObj[ aObjPoint[ p__dir ], 5 ]
  1834.       DO HasTitle WITH nCurrent, BN_UNHILITE
  1835.       DO HasTitle WITH p__dir, BN_HILITE
  1836.       nCurrent = p__dir
  1837.       nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  1838.       DO CASE
  1839.         CASE nCurrent = 13
  1840.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1841.         CASE nCurrent = 14
  1842.           DO TButton WITH BN_CLICKED, .F., nCurrent
  1843.       ENDCASE
  1844.     ELSE
  1845.       DO HasTitle WITH p__dir, BN_HILITE
  1846.     ENDIF
  1847.     nCurrent = p__dir
  1848.     nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  1849.  
  1850.   ENDIF
  1851.  
  1852.   *---------------------------------------------------------------
  1853.   *-- Repaint the Default button if we were on a button before and
  1854.   *-- the target is not a button.
  1855.   *---------------------------------------------------------------
  1856.   cCurrClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )
  1857.   IF cPrevClass = "BT_" .AND. cCurrClass <> "BT_"
  1858.     DO TButton WITH WM_PAINT, BN_DEFAULT, nDlgDef
  1859.     STORE .T. TO BT_OK
  1860.   ENDIF
  1861.  
  1862.   *---------------------------------------------------------
  1863.   *-- Save the current CK or RB pointer for the target group
  1864.   *---------------------------------------------------------
  1865.   DO CASE
  1866.     CASE nCurrent = 5                    && CK_CHEZ_1
  1867.       STORE nCurrent TO nCK_CHEZ
  1868.       IF TYPE( "p__dir" ) = "N"
  1869.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1870.       ENDIF
  1871.     CASE nCurrent = 7                    && CK_CHEZ_2
  1872.       STORE nCurrent TO nCK_CHEZ
  1873.       IF TYPE( "p__dir" ) = "N"
  1874.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1875.       ENDIF
  1876.     CASE nCurrent = 9                    && CK_CHEZ_3
  1877.       STORE nCurrent TO nCK_CHEZ
  1878.       IF TYPE( "p__dir" ) = "N"
  1879.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1880.       ENDIF
  1881.     CASE nCurrent = 6                    && RB_CONS_1
  1882.       STORE nCurrent TO nRB_CONS
  1883.       IF TYPE( "p__dir" ) = "N"
  1884.         STORE .F. TO RB_CONS_1
  1885.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1886.       ENDIF
  1887.     CASE nCurrent = 8                    && RB_CONS_2
  1888.       STORE nCurrent TO nRB_CONS
  1889.       IF TYPE( "p__dir" ) = "N"
  1890.         STORE .F. TO RB_CONS_2
  1891.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1892.       ENDIF
  1893.     CASE nCurrent = 10                   && RB_CONS_3
  1894.       STORE nCurrent TO nRB_CONS
  1895.       IF TYPE( "p__dir" ) = "N"
  1896.         STORE .F. TO RB_CONS_3
  1897.         DO TButton WITH BN_CLICKED, .F., nCurrent
  1898.       ENDIF
  1899.     CASE nCurrent = 13                   && BT_OK
  1900.       STORE nCurrent TO nBT
  1901.       IF TYPE( "p__dir" ) = "N"
  1902.         STORE .T. TO BT_OK
  1903.       ENDIF
  1904.     CASE nCurrent = 14                   && BT_CANCEL
  1905.       STORE nCurrent TO nBT
  1906.       IF TYPE( "p__dir" ) = "N"
  1907.         STORE .T. TO BT_CANCEL
  1908.       ENDIF
  1909.   ENDCASE
  1910.  
  1911. RETURN
  1912. *-- EOP: GetNext WITH p__dir, pl_SameGrp
  1913.  
  1914.  
  1915. FUNCTION WhenOk
  1916. PARAMETERS pnTarget
  1917. *----------------------------------------------------------------------------
  1918. * NAME
  1919. *   WhenOk - Validate the WHEN condition for a target object
  1920. *
  1921. * DESCRIPTION
  1922. *
  1923. * PARAMETERS
  1924. *   pnTarget   = Object ID to verify against
  1925. *
  1926. *----------------------------------------------------------------------------
  1927.   PRIVATE lWhenOk
  1928.   lWhenOk = .T.
  1929.  
  1930.  
  1931. RETURN lWhenOk
  1932. *-- EOF: WhenOk( pnTarget )
  1933.  
  1934.  
  1935. FUNCTION GetId
  1936. PARAMETERS pcVar
  1937. *----------------------------------------------------------------------------
  1938. * NAME
  1939. *   GetId() - Search for memvar name and return current_id
  1940. *----------------------------------------------------------------------------
  1941.   PRIVATE nId
  1942.   nId = 0
  1943.  
  1944.   DO CASE
  1945.     CASE pcVar = "CK_CHEZ_0"
  1946.       nId = 3
  1947.     CASE pcVar = "RB_CONS_0"
  1948.       nId = 4
  1949.     CASE pcVar = "CK_CHEZ_1"
  1950.       nId = 5
  1951.     CASE pcVar = "RB_CONS_1"
  1952.       nId = 6
  1953.     CASE pcVar = "CK_CHEZ_2"
  1954.       nId = 7
  1955.     CASE pcVar = "RB_CONS_2"
  1956.       nId = 8
  1957.     CASE pcVar = "CK_CHEZ_3"
  1958.       nId = 9
  1959.     CASE pcVar = "RB_CONS_3"
  1960.       nId = 10
  1961.     CASE pcVar = "EF_DELV_0"
  1962.       nId = 11
  1963.     CASE pcVar = "EF_DELV_1"
  1964.       nId = 12
  1965.     CASE pcVar = "BT_OK"
  1966.       nId = 13
  1967.     CASE pcVar = "BT_CANCEL"
  1968.       nId = 14
  1969.   ENDCASE
  1970.  
  1971. RETURN( nId )
  1972. *-- EOF: GetId( pcVar)
  1973.  
  1974.  
  1975. PROCEDURE PostVals
  1976. *----------------------------------------------------------------------------
  1977. * NAME
  1978. *   PostVals -
  1979. *
  1980. * DESCRIPTION
  1981. *
  1982. *----------------------------------------------------------------------------
  1983.  
  1984.   IF TYPE( "TVDIAL[1]" ) <> "U"
  1985.  
  1986.     TVDIAL[ 1 ] = CK_CHEZ_1
  1987.     TVDIAL[ 2 ] = CK_CHEZ_2
  1988.     TVDIAL[ 3 ] = CK_CHEZ_3
  1989.     TVDIAL[ 4 ] = RB_CONS_1
  1990.     TVDIAL[ 5 ] = RB_CONS_2
  1991.     TVDIAL[ 6 ] = RB_CONS_3
  1992.     TVDIAL[ 7 ] = EF_DELV_1
  1993.     TVDIAL[ 8 ] = BT_OK
  1994.     TVDIAL[ 9 ] = BT_CANCEL
  1995.  
  1996.   ENDIF
  1997.  
  1998. RETURN
  1999. *-- EOP: PostVals
  2000.  
  2001. PROCEDURE ReleObjs
  2002. *----------------------------------------------------------------------------
  2003. * NAME
  2004. *   ReleObjs - Scan the design DBF file and release the object variables
  2005. *
  2006. * DESCRIPTION
  2007. *
  2008. *----------------------------------------------------------------------------
  2009.  
  2010. RETURN
  2011. *-- EOP: ReleObjs
  2012.  
  2013.  
  2014. PROCEDURE ITVDIAL
  2015. *----------------------------------------------------------------------------
  2016. * NAME
  2017. *   ITVDIAL  - Builds the Initialization array for this dialog box
  2018. *
  2019. * DESCRIPTION
  2020. *   ITVDIAL with create a routine that you can call or cut from this
  2021. *   file to run a dialog box and capture the data on exit.
  2022. *
  2023. *   To run the dialog box,
  2024. *     SET PROCEDURE TO TVDIAL
  2025. *     DO ITVDIAL
  2026. *   Running ITVDIAL with use the defaults from the SCR file.  The
  2027. *   array will remain in memory after execution.
  2028. *
  2029. *   REMEMBER, REGENERATING THE DIALOG BOX WILL OVERWRITE THIS PROCEDURE!
  2030. *
  2031. *----------------------------------------------------------------------------
  2032.  
  2033.   PUBLIC ARRAY TVDIAL[ 9 ]
  2034.     *-- CK_CHEZ_1 - [ ] ~Hvarti
  2035.     TVDIAL[ 1 ]      = .F.
  2036.  
  2037.     *-- CK_CHEZ_2 - [ ] ~Tilset
  2038.     TVDIAL[ 2 ]      = .F.
  2039.  
  2040.     *-- CK_CHEZ_3 - [ ] ~Jarlsberg
  2041.     TVDIAL[ 3 ]      = .F.
  2042.  
  2043.     *-- RB_CONS_1 - ( ) ~Solid
  2044.     TVDIAL[ 4 ]      = .F.
  2045.  
  2046.     *-- RB_CONS_2 - ( ) ~Runny
  2047.     TVDIAL[ 5 ]      = .F.
  2048.  
  2049.     *-- RB_CONS_3 - ( ) ~Melted
  2050.     TVDIAL[ 6 ]      = .T.
  2051.  
  2052.     *-- EF_DELV_1 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2053.     TVDIAL[ 7 ]      = "PHONE HOME" + SPACE( 25 )
  2054.  
  2055.     *-- BT_OK -    ~Ok
  2056.     TVDIAL[ 8 ]      = .T.
  2057.  
  2058.     *-- BT_CANCEL -  ~Cancel
  2059.     TVDIAL[ 9 ]      = .F.
  2060.  
  2061.   *--------------------------------------------------------------
  2062.   *-- FXL_Cancel is set to .T. is the user Cancels the dialog box
  2063.   *--------------------------------------------------------------
  2064.   FXL_Cancel = .F.
  2065.  
  2066.   *--------------------------------------------------------------
  2067.   *-- FXL_NoChng lets the dialog box know that the values in the
  2068.   *-- array are not different from the SCR file defaults.  This
  2069.   *-- will allow the dialog box to use the .WIN file for a faster
  2070.   *-- startup.
  2071.   *--------------------------------------------------------------
  2072.   FXL_NoChng = .T.
  2073.  
  2074.   DO TVDIAL
  2075.  
  2076.   IF .NOT. FXL_Cancel                   && The user clicked on OK
  2077.  
  2078.     *-----------------------------------
  2079.     *-- Put your Ok processing code here
  2080.     *-----------------------------------
  2081.  
  2082.   ENDIF
  2083.  
  2084.   RELEASE TVDIAL
  2085.  
  2086. RETURN
  2087. *-- EOP: ITVDIAL
  2088.